package com.neuedu.corejava.ch12;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

public class MyFileWriter {

	public static void charWrite() {
		// 编写一个程序，向c:/temp/abc.txt 写入100行 “Hello file”
		//1、通过文件类进行文件定位，本例使用绝对路径
		File file = new File("c:/temp/abc.txt");
		//2、得到父目录，并创建父目录：mkdirs没有目录则创建，有目录则跳过
		file.getParentFile().mkdirs(); // 创建文件目录
		//3、定义一个写文件的字符流
		FileWriter writer = null;

		try {
			if (!file.exists()) {
				// file.delete();
				// System.out.println("删除文件");
				file.createNewFile();
			}
			file.createNewFile();// 创建新文件
			System.out.println("新增文件成功");
			writer = new FileWriter(file, true); // 以追加方式打开文件流;注意：默认参数为false，会情况原有内容，重新写入数据

			for (int i = 0; i < 100; i++) {
				String str = "你好，java文件读写" + i + "\r\n";
				writer.write(str);// 字符流可以使用char数组或字符串进行输出数据

			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (writer != null) {
				try {
					writer.close();// 调用close方法前，会默认调用flush刷新数据
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

	private static void byteWrite() {
		// 编写一个程序，向c:/temp/abc.txt 写入100行 “Hello file”
		File file = new File("c:/temp/abc.txt");
		file.getParentFile().mkdirs(); // 创建文件目录
		FileOutputStream outputStream = null;

		try {

			// 以字节流形式写文件
			if (file.exists()) {
				file.delete(); // 注意：与deleteOnExit的区别
				// file.deleteOnExit();
			}
			file.createNewFile();// 创建新文件
			outputStream = new FileOutputStream(file);

			for (int i = 0; i < 100; i++) {
				String str = "Hello file" + i + "\r\n";
				byte[] b = str.getBytes(); // 字节流写数据时，需要把数据转换成字节数组
				outputStream.write(b);// 把字节数组写入文件中（从程序输出文件）
				outputStream.flush();// 强制刷新缓存，把数据输出到文件中

			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (outputStream != null) {
				try {
					outputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

		}

	}

	public static void main(String[] args) {
		byteWrite();
		charWrite();

	}

}
